home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / cpp_libs / rjs.lha / RJS / Transport / src / DECnetSocket.C < prev    next >
C/C++ Source or Header  |  1991-06-14  |  2KB  |  94 lines

  1.  
  2. #include "Transport.h"
  3. #include <RJS/Util.h>
  4. #include <stdio.h>
  5. #include <osfcn.h>
  6. #include <libc.h>
  7. #include <string.h>
  8.  
  9. extern "C" {
  10.     int dnet_conn(
  11.         const char *node, 
  12.         const char *obj,
  13.         int type,
  14.         u_char *opt_out,
  15.         int opt_outl,
  16.         u_char *opt_in,
  17.         int *opt_inl
  18.     );
  19.     struct dn_naddr *dnet_addr(const char *cp);
  20.     struct nodeent  *getnodebyname(const char *node);
  21.     int dnet_eof(int s);
  22. }
  23.  
  24. int RJS_DECnetSocket::dnet_eof() { return ::dnet_eof(td); }
  25.  
  26. int RJS_DECnetSocket::passive(const RJS_DECnetAddress &da)
  27. {
  28.     if (inuse()) close();
  29.     if (!socket()) goto error;
  30.  
  31.     if (!bind(da,da.size())) goto error;
  32.     if (!listen(SOMAXCONN)) goto error;
  33.  
  34.     ss_set(SS_success);
  35.     sex=Passive;
  36.     return 1;
  37. error:
  38.     if (!return_on_error)
  39.         RJS_Util::crash_and_burn("DECnetSocket","open",ss_message());
  40.     return 0;
  41. }
  42.  
  43. int RJS_DECnetSocket::active(const RJS_DECnetAddress &da)
  44. {
  45.     if (inuse()) close();
  46.     if (!socket()) goto error;    // error creating socket
  47.  
  48.     if (!connect(da,da.size())) goto error;
  49.  
  50.     ss_set(SS_success);
  51.     sex=Active;
  52.     return 1;
  53. error:
  54.     if (!return_on_error)
  55.         RJS_Util::crash_and_burn("RJS_DECnetSocket","open",ss_message());
  56.     return 0;
  57. }
  58.  
  59. int RJS_DECnetSocket::dnet_conn(const char *node,const char *obj)
  60. {
  61.     td = ::dnet_conn(node,obj,type,NULL,NULL,NULL,NULL);
  62.         if (td<0) ss_set(RJS_Status(errno));
  63.         else ss_set(SS_success);
  64.     sex = Active;
  65.     return (ss_ok());
  66. }
  67.  
  68. int RJS_DECnetSocket::accept(RJS_DECnetSocket &newsocket)
  69. {
  70.     if (!ok() || !is_passive()) {
  71.         newsocket.td = -1;
  72.         newsocket.ss_set(SS_error);
  73.         return 0;
  74.     }
  75.  
  76.     if (newsocket.inuse()) newsocket.close();
  77.  
  78.     newsocket = *this;    
  79.  
  80.     RJS_DECnetAddress client_addr;
  81.     int clen=client_addr.size();
  82.         newsocket.td = RJS_Socket::accept(client_addr,clen);
  83.     if (newsocket.td < 0 ) {
  84.         newsocket.ss_set(RJS_Status(errno));
  85.         if (return_on_error) return 0;
  86.         RJS_Util::crash_and_burn("RJS_DECnetSocket","accept",ss_message());
  87.     } else {
  88.         newsocket.ss_set(SS_success);
  89.         return 1;
  90.     }
  91. }
  92.  
  93.  
  94.